package com.foreknow.controller;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 1.什么是会话：它是指客户端与服务器之间的数据传输（登录、购物车）
 * 2.会话管理：也就是对会话的管理
 * 3.常用的会话技术  Cookie  数据会保存在客户端  Session数据会保存在服务器端
 *
 * 什么是Cookie：这是客户端的技术，程序会把每个用户的数据以Cookie的形式写给用户各自的浏览器，当
 * 用户使用浏览器再次访问Web服务器的时候，它会有它各自的数据
 *
 * Cookie类：主要是用于存储会话数据的
 * 1.可以通过构造器来创建Cookie对象
 * 2.设置Cookie、
 *      setMaxAge（int expiry）设置Cookie的有效时间（是以秒为单位的)
 * 3.发送Cookie到浏览器端保存
 *      request addCookie(Cookie cookie)
 * 4.服务器端来接收Cookie
 *      response getCookies()
 *
 * Cookie的原理
 * 1.可以在服务器端创建一个Cookie对象，要把会话的数据存储到会话中
 * 2.服务器端会发送Cookie信息给浏览器，只后会把Cookie保存到浏览器端
 * 3.浏览器会在下一次访问的时候，会携带Cookie的信息（这些信息会包含在hhttp的请求头中）
 * 44.服务器会到浏览器携带cookie的信息
 *
 * 注意：后期如果解决客户端与服务器端的多次请求（解决方案可以使用h5中的本地储存）
 *
 * setMaxAge（int exp）
 *      1.正数：表示cookie数据保存浏览器的缓存到硬盘中，数值表示要保存的时间
 *      2.负数：表示cookie数据会保存在浏览器中，如果浏览器关闭，cookie就失效了
 *      3.0表示会删除同名的cookie数据
 *
 * cookie的数据类型只能保存非中文字符串类型。可以保存多个cookie，一个浏览器可以保存300个cookie
 * 每个站点最多可以存入20个cookie信息
 */
public class CookieDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        Cookie cookie=new Cookie("name","123456");
//        cookie.setMaxAge(1*30*24*60*60);//设置Cookie有效时间
//        resp.addCookie(cookie);
        //获取客户端的Cookie
        PrintWriter out=resp.getWriter();
        Cookie[] cookies=req.getCookies();
        if (cookies!=null){
            for (Cookie c:cookies) {
                String name=c.getName();
                String value=c.getValue();
                out.println(name);
                out.println(value);
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
